package com.yuzhi.master.conBjMx.domain.request;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;
import java.time.Instant;
import java.time.ZoneId;

/**
 * 更新最新报警记录请求对象
 *
 * @author system
 * @date 2025-01-14
 */
@Data
@Schema(description = "更新最新报警记录请求对象")
public class UpdateLatestConBjMxReq {

    /**
     * 外键ID
     */
    @NotBlank(message = "外键ID不能为空")
    @Schema(description = "外键ID")
    @JsonProperty("fKey")
    private String fKey;

    @Schema(description = "报警类型")
    private String bjType;

    /**
     * 报警结束时间
     */
    @Schema(description = "报警结束时间")
    @JsonProperty("cbEndTime")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime cbEndTime;

    /**
     * 是否处理状态（0：待受理，1：需处理，2：处理中，3：已处理，4：无需处理）
     */
    @Schema(description = "是否处理状态（0：待受理，1：需处理，2：处理中，3：已处理，4：无需处理）")
    @JsonProperty("isCl")
    private String isCl;

    /**
     * 设置报警结束时间（支持时间戳字符串）
     */
    public void setCbEndTime(String cbEndTimeStr) {
        if (cbEndTimeStr != null && !cbEndTimeStr.trim().isEmpty()) {
            try {
                // 尝试解析时间戳
                long timestamp = Long.parseLong(cbEndTimeStr);
                this.cbEndTime = LocalDateTime.ofInstant(
                    Instant.ofEpochMilli(timestamp), 
                    ZoneId.systemDefault()
                );
            } catch (NumberFormatException e) {
                // 如果不是时间戳，尝试解析标准日期格式
                try {
                    this.cbEndTime = LocalDateTime.parse(cbEndTimeStr);
                } catch (Exception ex) {
                    // 如果都失败，设置为null
                    this.cbEndTime = null;
                }
            }
        }
    }

    /**
     * 设置报警结束时间（LocalDateTime类型）
     */
    public void setCbEndTime(LocalDateTime cbEndTime) {
        this.cbEndTime = cbEndTime;
    }
}
